<?php

/**
*         ESTE ES EL UNICO MODULO QUE SE GENERA CON EL layout:
 *        -layout.php (valga la rendundancia)
 */
class homeActions extends sfActions
{

 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */

 public function executeAsociateAccount(sfWebRequest $request){


           $service            = new serviceAceptor();
           $userAgent = $this->getUser();

           $simpleSAMLAuth = new SimpleSAML_Auth_Simple('default-sp');
           if ($simpleSAMLAuth->isAuthenticated())
           {

                  if($userAgent->isAuthenticated()){
                      // si esta autenticado en ambos lados
                      // deberia redireccionar al home interno del sistema
                      return $this->redirect('home_login/index');
                  }else{
                               //si esta autenticado, obtengo los atributos de la aplicacion saml
                               $attributes  = $simpleSAMLAuth->getAttributes();

                               //si es correcto asocio a la BD de practil al usuario
                               $url                = $service->returnUrlAssociateAccount($attributes['email'][0], 1);
                               $respuesta_servicio = file_get_contents($url);
                               $decode             = json_decode($respuesta_servicio);

                               if($decode->{'success'})
                               {

                                               //ahora tego que registrarle el paquete aceptor( aca se registrar con el paquete basico)
                                               $url                = $service->returnUrlRegisterPacket(1, $attributes['id'][0], "aceptor-basico");
                                               $respuesta_servicio = file_get_contents($url);
                                               $decode             = json_decode($respuesta_servicio);
                                               if($decode->{'success'})
                                               {
                                                    //si asocie al usuario en la BD de practil correctamente
                                                    //registro al usuario a mi plataforma aceptor
                                                    //-le asigno sus acuerdos-actas...ect.
                                                    $arrayRespt = $service->usersRegister($attributes['nombre'][0],
                                                                                $attributes['apellido'][0],
                                                                                $attributes['apellido'][0],
                                                                                $attributes['email'][0],
                                                                                $attributes['password'][0]);

                                                    if($arrayRespt['success']){
                                                        //si es registre al usuario correctamente le agrego el id de practil
                                                        //
                                                        $arrayRespt = $service->userAsociatePractilId($arrayRespt['object'], $attributes['id'][0]);
                                                        if($arrayRespt){
                                                             return $this->redirect('@authenticated');
                                                        }else{
                                                             return $this->redirect('@homepage');
                                                        }
                                                    } else{
                                                        print_r($arrayRespt['message']);
                                                    }
                                               }

                               }else{
                                       return $this->redirect('@homepage');
                               }
                  }


           }else{
                return $this->redirect('@homepage');
           }




}


  public function executeAuthenticatedAplicaction(sfWebRequest $request){

     
      $service = new serviceAceptor();
      $userAgent = $this->getUser();


      $simpleSAMLAuth = new SimpleSAML_Auth_Simple('default-sp');
      if ($simpleSAMLAuth->isAuthenticated())
      {
  
          if($userAgent->isAuthenticated()){
              // si esta autenticado en ambos lados
              // deberia redireccionar al home interno del sistema
			      
              return $this->redirect('home_login/index');
          }else{
		  
		  
              //si esta autenticado en SAML pero no en la aplicacion
              // se procedera a generar la logica del negocio actual para autenticarlo en la aplicacion


               //obtengo datos de la session saml
               $attributes = $simpleSAMLAuth->getAttributes();

               //pregunto si este usuario esta asociado a mi plataforma ACEPTOR
               //los datos los voy  sacar de una consulta a practil para tener la informacion en tiempo
               //real y "no en la cookie de SAML"

                    $url      = $service->returnUrlGetUser($attributes['id'][0]);
                    $data     = file_get_contents($url);
                    $dataJson = json_decode($data);
                    if($dataJson->{'success'})
                    {
                             
                           $method    = $service->isAsociatePlataform($dataJson->{'packet'});

                           if($method['success'])
                           {
						       
                               //si esta asociado reviso que plan tiene este usuario, con un webservice-rest
                               // a practil
                                $url      = $service->returnUrlPacket($attributes['id'][0], 1);
                                $data     = file_get_contents($url);
                                $dataJson = json_decode($data);
								
                                    if($dataJson->{'success'})
                                    {      
                                            $service->login($attributes['id'][0], $this->getUser());

                                            if($dataJson->{'packetId'}==1){
                                              $this->getUser()->setAttribute('ses_tipo_user',null);
                                              $this->getUser()->setAttribute('ses_paquete_id',$dataJson->{'packetId'});
                                               return $this->redirect('home_login/index');
                                            }else{
                                             //usuario PAGO
                                              $this->getUser()->setAttribute('ses_tipo_user',$dataJson->{'packetTitle'});
                                              $this->getUser()->setAttribute('ses_paquete_id',$dataJson->{'packetId'});
                                              $this->redirect('@home_profesional');
                                            }        
                                     }
									 else
									 {
											//si no esta asociado llevara al home de asociacion de plataforma
										$this->setLayout(false);

										/*por ahora*/ return sfView::SUCCESS;
									 }

                                   //de acuerdo al plan que tenga cambia el layout de la aplicion (free-o-pagado)

                             }else
                             {

								
                                   //si no esta asociado llevara al home de asociacion de plataforma
                                   $this->setLayout(false);

                                   /*por ahora*/ return sfView::SUCCESS;
                             }

                    }else{
                          return $this->redirect('@homepage');
                    }


          }


      }else{
          return $this->redirect('@homepage');
      }




  }


    public function executeAuthenticatedTest(sfWebRequest $request){


          $service = new serviceAceptor();
          $userAgent = $this->getUser();
          $idUserPractil = $request->getParameter('id');

          if($userAgent->isAuthenticated()){
              // si esta autenticado en ambos lados
              // deberia redireccionar al home interno del sistema
              
              return $this->redirect('home_login/index');
          }else{
             
              //si esta autenticado en SAML pero no en la aplicacion
              // se procedera a generar la logica del negocio actual para autenticarlo en la aplicacion


               //obtengo datos de la session saml
          

               //pregunto si este usuario esta asociado a mi plataforma ACEPTOR
               //los datos los voy  sacar de una consulta a practil para tener la informacion en tiempo
               //real y "no en la cookie de SAML"

                    $url      = $service->returnUrlGetUser($idUserPractil);
                  
                    $data     = file_get_contents($url);
                    $dataJson = json_decode($data);
                 
                    if($dataJson->{'success'})
                    {
                         
                           $method    = $service->isAsociatePlataform($dataJson->{'packet'});
                          
                           if($method['success'])
                           {
                                
                               //si esta asociado reviso que plan tiene este usuario, con un webservice-rest
                               // a practil
                               
                                $url      = $service->returnUrlPacket($idUserPractil, 1);                
                                $data     = file_get_contents($url);

                                $dataJson = json_decode($data);
                                    if($dataJson->{'success'})
                                    {
                                            $service->login($idUserPractil, $this->getUser());
                                            
                                            if($dataJson->{'packetId'}==1){
                                              $this->getUser()->setAttribute('ses_tipo_user',null);
                                              $this->getUser()->setAttribute('ses_paquete_id',$dataJson->{'packetId'});
                                               return $this->redirect('home_login/index');
                                            }else{
                                             //usuario PAGO
                                              $this->getUser()->setAttribute('ses_tipo_user',$dataJson->{'packetTitle'});
                                              $this->getUser()->setAttribute('ses_paquete_id',$dataJson->{'packetId'});
                                              $this->redirect('@home_profesional');
                                            }                                            

                                           
                                     }

                                   //de acuerdo al plan que tenga cambia el layout de la aplicion (free-o-pagado)

                             }else
                             {

                                   
                                   //si no esta asociado llevara al home de asociacion de plataforma
                                   $this->setLayout(false);

                                   /*por ahora*/ return sfView::SUCCESS;
                             }

                    }else{
                          return $this->redirect('@homepage');
                    }


          }





    }

  /*
   este el el modulo de incio del sistema el cual se ejecuta con
   tempales/layout
   */

public function executeIndex(sfWebRequest $request)
{

      $message_sign_in   = $this->getUser()->getAttribute('message_sign_in',null);
      if($message_sign_in!=null){
          $this->arraySucces = $message_sign_in;
          $this->success = true;
      }else{
          $this->arraySucces = null;
          $this->success = false;
      }
      $this->getUser()->getAttributeHolder()->remove('message_sign_in');
      /**************************************************************************/


      $this->token =  $this->getUser()->getAttribute('s_tokenSignIn',"null");
      $this->email =  $this->getUser()->getAttribute('s_userMailUrlSignIn','null');
      /**************************************************************************/
      $this->getUser()->setAttribute('s_tokenSignIn',"null");
      $this->getUser()->setAttribute('s_userMailUrlSignIn','null');


     



      return sfView::SUCCESS;
}


 public function executeHome(sfWebRequest $request)
 {


      //$service = new serviceAceptor();
      $userAgent = $this->getUser();
      $simpleSAMLAuth = new SimpleSAML_Auth_Simple('default-sp');
      $token      = urldecode($request->getParameter('token'));
      $api        = urldecode($request->getParameter('apikey'));
      $email_user = urldecode($request->getParameter('email_user'));


      if ($simpleSAMLAuth->isAuthenticated())
      {

          if($userAgent->isAuthenticated()){
              // si esta autenticado en ambos lados
              // se procedera a generar la logica del negocio actual
              //$service->login($pk_practil, $userAgent);
              $this->redirect('home_login/index');
          }else{
              //obtengo datos de la session saml
              $this->redirect('@homepage');
          }
      }else{
       //no cuenta con la auntenticacion SAML

        $lib = new myLib();
        if($lib->validate_token($token)){
            if($lib->validate_api_key($api)){
              $this->getUser()->setAttribute('s_tokenSignIn',"congratulation");
              $this->getUser()->setAttribute('s_userMailUrlSignIn',$email_user);
            }else{
              $token = $this->getUser()->setAttribute('s_tokenSignIn',"null");
            }
        }else{
             $token = $this->getUser()->setAttribute('s_tokenSignIn',"null");
        }
        $this->redirect('@homepage');

      }


  /*********************************************************************************/
     /*



      $this->redirect('home/index');  */
 }



   public function executeRemove_session(sfWebRequest $request){
    $this->getUser()->getAttributeHolder()->remove('ses_user_id');
    $this->getUser()->getAttributeHolder()->remove('ses_user_nombre');
    $this->getUser()->getAttributeHolder()->remove('ses_user_ape_pat');
    $this->getUser()->getAttributeHolder()->remove('ses_user_ape_mat');
    $this->getUser()->getAttributeHolder()->remove('ses_user_correo');
    $this->getUser()->getAttributeHolder()->remove('ses_tipo_user');
    $this->getUser()->getAttributeHolder()->remove('ses_acuerdo_id');
    $this->getUser()->getAttributeHolder()->remove('ses_acta_id');
    $this->getUser()->getAttributeHolder()->remove('ses_categoria');
    $this->getUser()->getAttributeHolder()->remove('ses_lst_documento');
    $this->getUser()->getAttributeHolder()->remove('ses_paquete_id');
    $this->getUser()->setAuthenticated(false);
    $this->getUser()->getAttributeHolder()->clear();
    return $this->redirect('@homepage');

  }


   public function executeSign_up(sfWebRequest $request){

   }


public function executeConfirmation_response(sfWebRequest $request){

   $email = $request->getParameter('email');
   $this->email = $email;
   $respuesta =  $this->getUser()->getAttribute('ses_confirmacion',false);
   if($respuesta){
       $this->getUser()->getAttributeHolder()->remove('ses_confirmacion');
       return sfView::SUCCESS;
   }else{
       $this->getUser()->getAttributeHolder()->remove('ses_confirmacion');
       return sfView::ERROR;
   }
}

}
